
package algoritmos2011;

import algoritmos2011.Sistema.TipoRet;

public class Main {

    public static void main(String[] args) {
            Sistema s = new Sistema();
            Prueba p = new Prueba();

            //-----------------------PRUEBAS OK---------------------------//
            //PruebaOK_1(s,p);
            PruebaOK_dario(s,p);
            //PruebaOK_2(s,p);
            //PruebaOK_3(s,p);
            //PruebaOK_3_Fabio(s,p);
            //PruebaOK_4(s,p);
            //PruebaOK_5(s,p);


             //-----------------------PRUEBAS ERROR------------------------//
           // PruebaERROR_1(s,p);
           // PruebaERROR_2(s,p);

            p.imprimirResultadosPrueba();
    }


    //-------------PRUEBAS OK-----------------//
    
    public static void PruebaOK_dario (Sistema s, Prueba p){
    	Red r = s.crearRed();
    	p.ver(s.registrarUsuario("aa"), Sistema.TipoRet.OK, "Se agrega usuario aa");
    	//p.ver(s.registrarUsuario("aa"), Sistema.TipoRet.ERROR, "El  usuario aa ya existe");
    	//p.ver(s.eliminarUsuario("aa"), Sistema.TipoRet.OK, "Se elimina el  usuario aa ");
    	p.ver(s.registrarUsuario("bb"), Sistema.TipoRet.OK, "Se agrega  usuario bb ");
    	
    	//p.ver(s.solicitarAmistad("bb", "aa"), Sistema.TipoRet.OK, "Solicitud de amistad bb a bb ");
    	//p.ver(s.responderSolicitudAmistad("aa",Red.RespuestaAmistad.ACEPTAR), TipoRet.OK, "aa acepta amistad a bb");
    	// p.ver(s.enviarMensaje("aa", "bb","Hola", "Hacemos Facebook?"), Sistema.TipoRet.OK, "Mensaje enviado va a bb");
    	 
    	 p.ver(s.invitarEvento("aa", "bb","Fiesta Facebook", 321, 23), Sistema.TipoRet.ERROR, "aa invita a bb");
    	 p.ver(s.responderEvento("bb", Red.RespuestaEvento.ASISTIRE), TipoRet.OK, "bb asistira!");
        // s.listarEventosPendientes("bb");
    	 //s.leerBandejaEntrada("aa");
    	//s.listarUsuarios();
    }
    public static void PruebaOK_1(Sistema s, Prueba p){
        Red r = s.crearRed();
        System.out.println("Se crea la red social vacia");
        s.listarUsuarios();
        tituloPrueba("PRUEBA OK 1: AGREGAR USUARIOS");
        p.ver(s.registrarUsuario("Mark Zuckerberg"), Sistema.TipoRet.OK, "Se agrega usuario Mark Zuckerberg");
        p.ver(s.registrarUsuario("Eduardo Saverin"), Sistema.TipoRet.OK, "Se agrega usuario Eduardo Saverin");
        p.ver(s.registrarUsuario("Sean Parker"), Sistema.TipoRet.OK, "Se agrega usuario Sean Parker");
        p.ver(s.registrarUsuario("Tyler Winklevoss"), Sistema.TipoRet.OK, "Se agrega usuario Tyler Winklevoss");
        p.ver(s.registrarUsuario("Cameron Winklevoss"), Sistema.TipoRet.OK, "Se agrega usuario Cameron Winklevoss");
        p.ver(s.registrarUsuario("Erica Albright"), Sistema.TipoRet.OK, "Se agrega usuario Erica Albright");
        s.listarUsuarios();
        finPrueba(" Fin PRUEBA OK 1");

    }

    public static void PruebaOK_2(Sistema s, Prueba p){
        tituloPrueba("PRUEBA OK 2: ELIMINAR USUARIOS");
        Red r = s.crearRed();
        System.out.println("Se crea la red social vacia");
        p.ver(s.registrarUsuario("Mark Zuckerberg"), Sistema.TipoRet.OK, "Se agrega usuario Mark Zuckerberg");
        p.ver(s.registrarUsuario("Eduardo Saverin"), Sistema.TipoRet.OK, "Se agrega usuario Eduardo Saverin");
        p.ver(s.registrarUsuario("Sean Parker"), Sistema.TipoRet.OK, "Se agrega usuario Sean Parker");
        p.ver(s.eliminarUsuario("Eduardo Saverin"), TipoRet.OK, "Se elimina Eduardo Saverin");
        p.ver(s.eliminarUsuario("Sean Parker"), TipoRet.OK, "Se elimina Sean Parker");
        s.listarUsuarios();
        finPrueba(" Fin PRUEBA OK 2");
    }
    public static void PruebaOK_3(Sistema s, Prueba p){
        tituloPrueba("PRUEBA OK 3: SOLICITUDES DE AMISTAD");
        Red r = s.crearRed();
        agregarUsuarios(s);
        p.ver(s.solicitarAmistad("Mark Zuckerberg", "Eduardo Saverin"), Sistema.TipoRet.OK, "Solicitud de amistad Zuckerberg a Saverin");
        p.ver(s.solicitarAmistad("Mark Zuckerberg", "Sean Parker"), Sistema.TipoRet.OK, "Solicitud de amistad Zuckerberg a Parker");
        p.ver(s.solicitarAmistad("Sean Parker", "Eduardo Saverin"), Sistema.TipoRet.OK, "Solicitud de amistad Parker a Saverin");
        p.ver(s.responderSolicitudAmistad("Eduardo Saverin",Red.RespuestaAmistad.RECHAZAR), TipoRet.OK, "Saverin RECHAZA amistad a Parker");
        p.ver(s.responderSolicitudAmistad("Eduardo Saverin",Red.RespuestaAmistad.ACEPTAR), TipoRet.OK, "Saverin ACEPTA amistad a Zuckerberg");
        p.ver(s.responderSolicitudAmistad("Sean Parker",Red.RespuestaAmistad.ACEPTAR), TipoRet.OK, "Parker ACEPTA amistad a Zuckerberg");
        s.leerBandejaEntrada("Mark Zuckerberg");
        finPrueba(" Fin PRUEBA OK 3");
    }
    public static void PruebaOK_3_Fabio(Sistema s, Prueba p){
        tituloPrueba("PRUEBA OK 3: SOLICITUDES DE AMISTAD");
        Red r = s.crearRed();
        agregarUsuarios2(s);
        p.ver(s.solicitarAmistad("Mark Zuckerberg-1", "Eduardo Saverin-2"), Sistema.TipoRet.OK, "Solicitud de amistad Zuckerberg a Saverin");
        p.ver(s.solicitarAmistad("Mark Zuckerberg-1", "Sean Parker-3"), Sistema.TipoRet.OK, "Solicitud de amistad Zuckerberg a Parker");
        p.ver(s.solicitarAmistad("Sean Parker-3", "Eduardo Saverin-2"), Sistema.TipoRet.OK, "Solicitud de amistad Parker a Saverin");
        p.ver(s.responderSolicitudAmistad("Eduardo Saverin-2",Red.RespuestaAmistad.RECHAZAR), TipoRet.OK, "Saverin RECHAZA amistad a Parker");
        p.ver(s.responderSolicitudAmistad("Eduardo Saverin-2",Red.RespuestaAmistad.ACEPTAR), TipoRet.OK, "Saverin ACEPTA amistad a Zuckerberg");
        p.ver(s.responderSolicitudAmistad("Sean Parker-3",Red.RespuestaAmistad.ACEPTAR), TipoRet.OK, "Parker ACEPTA amistad a Zuckerberg");
        s.leerBandejaEntrada("Mark Zuckerberg-1");
        s.destruirRed();
      
        finPrueba(" Fin PRUEBA OK 3");
    }

    public static void PruebaOK_4(Sistema s, Prueba p){
        tituloPrueba("PRUEBA OK 4: ENVIO DE MENSAJES");
        Red r = s.crearRed();
        agregarUsuarios(s);
        hacerAmigos(s);
        p.ver(s.enviarMensaje("Mark Zuckerberg", "Eduardo Saverin","Hola", "Hacemos Facebook?"), Sistema.TipoRet.OK, "Mensaje enviado Saverin a Zuckerberg");
        p.ver(s.enviarMensaje("Eduardo Saverin", "Mark Zuckerberg","OK", "Haremos historia!!"), Sistema.TipoRet.OK, "Mensaje enviado Zuckerberg a Saverin");
        p.ver(s.enviarMensaje("Sean Parker", "Mark Zuckerberg","Cita", "Nos vemos el lunes"), Sistema.TipoRet.OK, "Mensaje enviado Parker a Zuckerberg");
        s.leerBandejaEntrada("Mark Zuckerberg");
        s.leerBandejaEntrada("Eduardo Saverin");
        s.leerBandejaEntrada("Sean Parker");
        finPrueba(" Fin PRUEBA OK 4");
    }

    public static void PruebaOK_5(Sistema s, Prueba p){
        tituloPrueba("PRUEBA OK 5: INVITACION EVENTOS");
        Red r = s.crearRed();
        agregarUsuarios(s);
        hacerAmigos(s);
        p.ver(s.invitarEvento("Sean Parker", "Mark Zuckerberg","Fiesta Facebook", 106, 23), Sistema.TipoRet.OK, "Parker invita a Zuckerberg");
        s.listarEventosPendientes("Mark Zuckerberg");
        p.ver(s.responderEvento("Mark Zuckerberg", Red.RespuestaEvento.ASISTIRE), TipoRet.OK, "Zuckerberg asistirá");
        s.listarEventosPendientes("Mark Zuckerberg");
        finPrueba(" Fin PRUEBA OK 5");
    }

    public static void PruebaERROR_1(Sistema s, Prueba p){
            tituloPrueba("PRUEBA ERROR 1: INGRESO DE USUARIOS REPETIDOS");
            Red r = s.crearRed();
            System.out.println("Se crea la red social vacia");
            p.ver(s.registrarUsuario("Mark Zuckerberg"), Sistema.TipoRet.OK, "Se agregó usuario Mark Zuckerberg");
            p.ver(s.registrarUsuario("Eduardo Saverin"), Sistema.TipoRet.OK, "Se agregó Eduardo Saverin");
            p.ver(s.registrarUsuario("Sean Parker"), Sistema.TipoRet.OK, "Se agregó Sean Parker");
            p.ver(s.registrarUsuario("Mark Zuckerberg"), Sistema.TipoRet.ERROR, "Ya existe el usuario Mark Zuckerberg");
            p.ver(s.registrarUsuario("Sean Parker"), Sistema.TipoRet.ERROR, "Ya existe el usuario Sean Parker");
            s.listarUsuarios();
            finPrueba(" Fin PRUEBA ERROR 1");
    }

    public static void PruebaERROR_2(Sistema s, Prueba p){
        tituloPrueba("PRUEBA ERROR 2: ELIMINAR USUARIOS INACTIVOS");
        Red r = s.crearRed();
        System.out.println("Se crea la red social vacia");
        p.ver(s.registrarUsuario("Mark Zuckerberg"), Sistema.TipoRet.OK, "Se agregó usuario Mark Zuckerberg");
        p.ver(s.registrarUsuario("Eduardo Saverin"), Sistema.TipoRet.OK, "Se agregó Eduardo Saverin");
        p.ver(s.registrarUsuario("Sean Parker"), Sistema.TipoRet.OK, "Se agregó Sean Parker");
        p.ver(s.eliminarUsuario("Eduardo Saverin"), TipoRet.OK, "Se elimina Eduardo Saverin");
        p.ver(s.eliminarUsuario("Sean Parker"), TipoRet.OK, "Se elimina Sean Parker");
        p.ver(s.eliminarUsuario("Eduardo Saverin"), TipoRet.ERROR, "Eduardo Saverin está inactivo");
        p.ver(s.eliminarUsuario("Sean Parker"), TipoRet.ERROR, "Sean Parker está inactivo");
        s.listarUsuarios();
        finPrueba(" Fin PRUEBA ERROR 2");
    }


    public static void tituloPrueba(String s){
        System.out.println("****************************************************************");
        System.out.println("  "+ s );
        System.out.println("*****************************************************************");
    }

    public static void finPrueba(String s){
        System.out.println("******************* " + s +" ***********************");
        System.out.println("****************************************************");
        System.out.println();
    }

    public static void agregarUsuarios(Sistema s){
        s.registrarUsuario("Mark Zuckerberg");
        s.registrarUsuario("Eduardo Saverin");
        s.registrarUsuario("Sean Parker");
        s.registrarUsuario("Tyler Winklevoss");
        s.registrarUsuario("Cameron Winklevoss");
        s.registrarUsuario("Erica Albright");
    }
    public static void agregarUsuarios2(Sistema s){
        s.registrarUsuario("Mark Zuckerberg-1");
        s.registrarUsuario("Eduardo Saverin-2");
        s.registrarUsuario("Sean Parker-3");
    }
    public static void hacerAmigos(Sistema s){
        s.solicitarAmistad("Mark Zuckerberg", "Eduardo Saverin");
        s.solicitarAmistad("Mark Zuckerberg", "Sean Parker");
        s.solicitarAmistad("Sean Parker", "Eduardo Saverin");
        s.responderSolicitudAmistad("Eduardo Saverin",Red.RespuestaAmistad.ACEPTAR);
        s.responderSolicitudAmistad("Eduardo Saverin",Red.RespuestaAmistad.ACEPTAR);
        s.responderSolicitudAmistad("Sean Parker",Red.RespuestaAmistad.ACEPTAR);
    }
}
